package com.qf.controller;

import com.qf.pojo.Admin;
import com.qf.service.AdminService;
import com.qf.service.impl.AdminServiceImpl;
import com.qf.utils.MD5Utils;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

/**
 * 管理员模块
 */
@WebServlet("/admin")
public class AdminServlet extends BaseServlet {

    /**
     * 管理员登录
     * @param request 请求对象
     * @param response 响应对象
     */
    public void adminLogin(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {

        //验证码存储在服务器端
        //0)加入验证码:先校验验证码,管理员输入的验证码,和HttpSession服务器端存储的验证码是否一致
        //接收管理员输入的验证码内容
        String code = request.getParameter("code");
        //获取HttpSession
        HttpSession session = request.getSession();
        //从session取出服务器端存储的验证码
        String  checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");

        //验证码一次性验证:如果当前这次输入错了,将上一次的信息从session删除了
        session.removeAttribute("CHECKCODE_SERVER");
        //错误提示
        if(code==null || !checkcode_server.equalsIgnoreCase(code)){
            request.setAttribute("msg","验证码输入错误") ;
            //请求转发到
            request.getRequestDispatcher("/admin/admin_login.jsp").forward(request,response);
            return;
        }




        //1)接收管理员登录用户密码
        //2)密码需要加密 :get提交/post提交 都可以看到密码信息
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //username/password都null或者"",错误提示信息
        //jdk提供:信息摘要算法的工具:MessageDigest-->
        // public static MessageDigest getInstance :创建当前类的实例
        // String字符串内容---byte[] digest() :转换成字节数组
        password = MD5Utils.md5(password) ;
        System.out.println(password) ;

        //调用管理员业务接口
        AdminService adminService = new AdminServiceImpl() ;
        Admin admin = adminService.getAdminByName(username, password);
        if(admin!=null){
            //找到了,将管理员实体存储在HttpSession中
            //从请求对象中获取HttpSession
            session.setAttribute("admin",admin) ;
            //重定向到admin/admin_index.jsp :后台主页
            response.sendRedirect(request.getContextPath()+"/admin/admin_index.jsp");
        }else{
            request.setAttribute("msg","用户名或者密码输入错误") ;
            //请求转发
            request.getRequestDispatcher("/admin/admin_login.jsp").forward(request,response);
        }


    }

    /**
     * 管理员退出
     * @param request 请求对象
     * @param response 响应对象
     */
    public void admin_logOut(HttpServletRequest request,HttpServletResponse response) throws IOException {


        //1)从request对象中获取HttpSession
        HttpSession session = request.getSession();
        //2)判断
        if(session!=null){
            //将session清除了,使用会话无效
            //public void invalidate()
            session.invalidate();
        }
        //重定向到管理员主页
        response.sendRedirect(request.getContextPath()+"/admin/admin_index.jsp");
    }

}
